home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Special 5 / Amiga Plus Sonderheft 1996 #5.iso / programme / imagedesk304 / imagedesk / instdata.lha / instdata / CatDescription < prev    next >
Text File  |  1995-07-10  |  5KB  |  156 lines

  1.  
  2.  
  3.                 Description of ImageDesk catalog files
  4.  
  5.  
  6.  
  7.  
  8.  
  9. I decided to use C-syntax for the description as this might be the most
  10. common programing language on the amiga.
  11.  
  12.  
  13. The catalog header
  14. ~~~~~~~~~~~~~~~~~~
  15.  
  16. #define OLDCATIDENT   0x49444354
  17. #define CATIDENT      0x49444341
  18.  
  19. struct CatHeader
  20. {
  21.     ULONG Ident;      /* as defined above */
  22.     ULONG FileSize;   /* Raw Bytes of contained data, uncompressed,
  23.                          without CatHeader */
  24.     UWORD NumEntries; /* Number of containing thumbnail entries */
  25.     UBYTE ThumbSize;  /* max. values for width & height:
  26.                          60, 80, 100, 120, 150 or 0! (see below) */
  27.     UBYTE UseXpk;     /* 1 = Use XPK, 0 = Not Packed */
  28.     UBYTE Path[256];  /* Path where to find original images
  29.                          of following entries */
  30. };
  31.  
  32.  
  33. If CatHeader.Ident has the value OLDCATIDENT, you have detected an old
  34. catalog file. In this case CatHeader.ThumbSize is set to zero which
  35. means the thumbnail images have the maximum size of 80x80 pixels
  36.  
  37. A catalog reader should do the following at first:
  38.  
  39. ------------------------------------------------------------------------
  40. ...
  41. if( sizeof(CatHeader) != Read(file,&CatHeader,sizeof(CatHeader)) )
  42. {
  43.     puts("error reading file!");
  44.     ...
  45. }
  46. else
  47. {
  48.     switch(CatHeader.Ident)
  49.     {
  50.           case CATIDENT:    break;
  51.           case OLDCATIDENT: CatHeader.ThumbSize = 80; break;
  52.           default:          puts("Not an ImageDesk catalog file!") ...
  53.     }
  54.     ...
  55. }
  56. ...
  57. ------------------------------------------------------------------------
  58.  
  59.  
  60. The thumbnail entries
  61. ~~~~~~~~~~~~~~~~~~~~~
  62.  
  63. struct ThumbEntry
  64. {
  65.     UWORD SkipBytes;      /* Skipt these number of bytes
  66.                              to jump to next entry             */
  67.     UBYTE FileName[108];  /* Filename of original image        */
  68.     UWORD Width;          /* Width of original image           */
  69.     UWORD Height;         /* Height of original image          */
  70.     UWORD Depth;          /* Bit depth of original image       */
  71.     UWORD Type;           /* Image Type (see below)            */
  72.     UWORD Mode;           /* Private!!                         */
  73.     UBYTE IconWidth;      /* Real thumbnail width              */
  74.     UBYTE IconHeight;     /* Real thumbnail height             */
  75.     BOOL   Clut;          /* is palette information available? */
  76. };
  77.  
  78. Supported image types:
  79.  
  80. #define IT_IFF 0x0100
  81. #define IT_GIF 0x0200
  82. #define IT_JPG 0x0300
  83. #define IT_PCX 0x0400
  84. #define IT_BMP 0x0500
  85. #define IT_PCD 0x0600
  86. #define IT_PNM 0x0700
  87. #define IT_TGA 0x0800
  88.  
  89. The lower 8 bit are reserved for future use. This means
  90. you should avoid simple comparison for type checking:
  91.  
  92. WRONG:
  93.  
  94.    if(Type == IT_IFF) puts("Image type is IFF");
  95.  
  96. RIGHT:
  97.  
  98.    if((Type & 0xFF00) == IT_IFF) puts("Image type is IFF");
  99.  
  100. Right after the descriptor "struct ThumbEntry" the data of the
  101. thumbnail image is stored. It contains the RGB values COLUMN BY
  102. COLUMN starting with the top-left corner. One byte is used for
  103. every pixel:
  104.  
  105.   bit 7  6  5  4  3  2  1  0
  106.   ---------------------------
  107.       R2 R1 R0 G2 G1 G0 B1 B0
  108.       |______| |______| |___|
  109.         Red     Green   Blue
  110.  
  111. Exactly (ThumbEntry.IconWidth * ThumbEntry.IconHeight) RasterBytes
  112. are stored. THIS IS NOT THE SAME AS CatHead.ThumbSize!
  113.  
  114.  
  115.  
  116. Complete catalog file
  117. ~~~~~~~~~~~~~~~~~~~~~
  118.  
  119.  
  120.    -----------------------------
  121.  
  122.    CatHeader (struct CatHeader)
  123.  
  124.    -----------------------------   -----|
  125.                                         |
  126.    Entry 1   (struct ThumbEntry)        |
  127.                                         |
  128.    RasterData 1                         |
  129.                                         |
  130.    -----------------------------        |
  131.                                         |
  132.    Entry 2   (struct ThumbEntry)        | If XPK has been used this
  133.                                         | body part is compressed
  134.    RasterData 2                         | (CatHead.UseXpk == TRUE)
  135.                                         |
  136.    -----------------------------        |
  137.                                         |
  138.    ...                                  |
  139.                                         |
  140.    -----------------------------        |
  141.                                         |
  142.    Entry n   (struct ThumbEntry)        |
  143.                                         |
  144.    RasterData n                         |
  145.                                         |
  146.    -----------------------------   -----|
  147.  
  148.  
  149.  
  150.  
  151. If you have further questions on this document feel free to contact me
  152.  
  153.  
  154. -- Reinhard Haslbeck
  155.  
  156.